<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>11.15</title>
</head>
<body>
    <script>
        // let name=null;
        // let obj={
        //     age:19
        // }
        // Object.defineProperty(obj,"name",{
        //     enumerable:false,
        //     configurable:false,
        //     get:()=>{
        //         // console.log(11)
        //         return name;
        //     },
        //     set:(value)=>{   //给他重新赋值
        //         console.log(value)  //12  
        //         name=value;  
              
        //     }
        // })
        // console.log(Object.keys(obj))
        
        // let obj={
        //     name:"lili",
        //     age:"12"
        // }
        // let proxy=new Proxy(obj,{
        //     get:(target,prop,receiver)=>{
        //         console.log("get",target,prop,receiver)  //{name: 'lili'}    name     Proxy(Object){name: 'lili'}
        //         // return 12
        //     },
        //     set:(target,prop,value,receiver)=>{
        //         console.log("set",target,prop,value,receiver)  //{name: 'lili'}  name   12    Proxy(Object){name: 'lili'}
        //     }
        // })
        //必须打印proxy.name等

        // const myWeakMap = new WeakMap();
        // // 创建一些对象作为键
        // const obj1 = {};
        // const obj2 = {};

        // // 设置键值对
        // myWeakMap.set(obj1, 'Value 1');
        // myWeakMap.set(obj2, 'Value 2');
        // console.log(myWeakMap)


        /*
            对象继承的方式：
            原型链继承： 所有实例都在一个原型上，如果修改就会全部都会改变  不能向超类型构造函数传递参数
            借用构造函数继承：子类型函数中调用超类型构造函数，解决了不能向超类型构造函数传递参数 但是超类型构造函数定义的方法，子类型函数不能获取到
            组合继承：是将原型链和借用构造函数结合在一起，将子类型的原型设置为超类型的实例，  但是调用了两次函数 会造成不必要的属性和方法。
            原型式继承：在一个函数中传入一个对象 返回一个以这个对象为原型的对象  Object.create（）
            寄生式继承：就是在一个函数中传入一个对象 然后进行扩展 这个扩展就是继承 返回这个对象 不能复用
            寄生式组合继承：就是使用超类型的原型的副本 来作为子类型的原型 这样就避免了不必要的属性。
            
        */
    </script>
</body>
</html>